]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Use GrabHelper for folder popups
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 11 Jun 2014 11:13:12 +0000 (13:13 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 11 Jun 2014 21:24:30 +0000 (23:24 +0200)
As clicks outside the app picker should still be handled normally
while clicks inside should dismiss the popup, we cannot make full
use of GrabHelper. However using it at least for focus handling
fixes some minor details we are getting wrong, for instance not
restoring the previous focus after dismissing a folder popup.

js/ui/appDisplay.js

index e43a67938439a2e64410cf43b03c03254553dd26..854acd1b4af508c47fdf6133e3dcabb3d552fa85 100644 (file)
@@ -16,6 +16,7 @@ const Atk = imports.gi.Atk;
 const AppFavorites = imports.ui.appFavorites;
 const BoxPointer = imports.ui.boxpointer;
 const DND = imports.ui.dnd;
+const GrabHelper = imports.ui.grabHelper;
 const IconGrid = imports.ui.iconGrid;
 const Main = imports.ui.main;
 const Overview = imports.ui.overview;
@@ -1249,18 +1250,7 @@ const AppFolderPopup = new Lang.Class({
             function() {
                 this.actor.destroy();
             }));
-        this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
-    },
-
-    _onKeyPress: function(actor, event) {
-        if (!this._isOpen)
-            return Clutter.EVENT_PROPAGATE;
-
-        if (event.get_key_symbol() != Clutter.KEY_Escape)
-            return Clutter.EVENT_PROPAGATE;
-
-        this.popdown();
-        return Clutter.EVENT_STOP;
+        this._grabHelper = new GrabHelper.GrabHelper(this.actor);
     },
 
     toggle: function() {
@@ -1274,6 +1264,12 @@ const AppFolderPopup = new Lang.Class({
         if (this._isOpen)
             return;
 
+        this._isOpen = this._grabHelper.grab({ actor: this.actor,
+                                               onUngrab: Lang.bind(this, this.popdown) });
+
+        if (!this._isOpen)
+            return;
+
         this.actor.show();
 
         this._boxPointer.setArrowActor(this._source.actor);
@@ -1282,7 +1278,6 @@ const AppFolderPopup = new Lang.Class({
 
         this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
 
-        this._isOpen = true;
         this.emit('open-state-changed', true);
     },
 
@@ -1290,6 +1285,8 @@ const AppFolderPopup = new Lang.Class({
         if (!this._isOpen)
             return;
 
+        this._grabHelper.ungrab({ actor: this.actor });
+
         this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
                               BoxPointer.PopupAnimation.SLIDE);
         this._isOpen = false;